SNiFF+ external access communication protocol

Sniffaccess distinguishes between requests and notifications. Requests are sent to SNiFF+ and usually are actions for SNiFF+ to execute. Notifications are sent by SNiFF+ to Sniffaccess upon the execution of a registered action. The following is a description of the possible requests and notifications.
Request format
The format for requests from external programs to SNiFF+ is:

REQUEST = REQUEST_STRING [ ARGUMENTS ].
Arguments can be enclosed in double quotes "".
Comment format
Request strings can contain comments. A comment starts with an unquoted `#' and ends with the next newline.
Example:
# this is a comment
retrieve */ "menu" # retrieves the string "menu" from all projects
Project name format
Projects are specified this way:
PROJECT = PROJECT_PATH ["/"].
PROJECT_PATH = PROJECT_NAME | PROJECT_PATH "/" PROJECT_NAME.
PROJECT_NAME = PATTERN.
A PATTERN has the same format as filename patterns in the bourne shell.

Wildcard character | Match
* | any number of characters
? | a single character
[a-zA-Z] | a single character in the given range of characters
[^...] or [!...] | a single character NOT in the given range of characters

Project specification examples:

Project specification | Description
fb.proj/et3.proj/CONTAINER.proj | subproject CONTAINER.proj only
sniff_et3.proj | root project sniff_et3.proj only
sniff_et3.proj/ | root project sniff_et3.proj and all sub-projects
sniff_et3.proj/et3.proj | subproject et3.proj of project sniff_et3.proj
sniff_et3.proj/et3.proj/* | all subprojects (nonrecursive) of et3.proj (without et3.proj )
sniff_et3.proj/et3.proj/*/ | all subprojects (recursive) of et3.proj (without et3.proj )
*/ | all loaded projects recursively

Symbol format
The following is the symbol format:
SYMBOL_NAME = NON_MEMBER_NAME | CLASS_NAME "::" MEMBER_NAME.

TYPE_SPEC = | "ANY" | "CLASS" | "INSTVAR" | "METHOD_DEF" | "METHOD_IMPL" | "FRIEND" | "VARIABLE" | "CONSTANT" | "FUNCTION" | "ENUM" | "ENUM_ITEM" | "TYPEDEF" | "MACRO".

Path and filename format
The following placeholders are used below:

REPOSITORY = PATH.
SHARED_WE = PATHS.
PRIVATE_WE = PATH.
PATHS = PATH [ ":" PATHS ].
PATH = Unix absolute pathname.
FILE = Unix absolute pathname.
Environment variables are allowed in the pathname specifications as long as the resulting path evaluates to an absolute path.
Version and configuration format
The following placeholders are used below:
CONFIGURATION = string.
VERSION = integer { "." integer }.
COMMENT = quoted string.
Working environment format
The following placeholders are used below:
WORKING_ENVIRONMENT = ' " '"'[owner]("PWE"|"SSWE"|"SOWE"|"RWE")":"workenv_name'"'
owner = string
workenv_name = string